package com.tao.service;


import com.alibaba.fastjson.JSONObject;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.tao.utils.FileUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.UUID;

@Service
public class QiniuServiceImpl {

    private static final Logger logger = LoggerFactory.getLogger(QiniuServiceImpl.class);

    // 设置好账号的ACCESS_KEY和SECRET_KEY
    String ACCESS_KEY = "zEe97IbyW_YinOIIKWXyW-DfpWOlWJoy1FbhibXU";
    String SECRET_KEY = "XXDmm_3rXSUwrJSTVOxmGt7q6pmVZ8927l29hrYX";
    // 要上传的空间
    String bucketname = "alubus-87076-springboot";

    // 密钥配置
    Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
    // 构造一个带指定Zone对象的配置类,不同的七云牛存储区域调用不同的zone
    Configuration cfg = new Configuration(Zone.zone2());//设置华南的服务器
    // ...其他参数参考类注释
    UploadManager uploadManager = new UploadManager(cfg);

    // 测试域名，只有30天有效期
//    private static String QINIU_IMAGE_DOMAIN = "http://qwr4vk6si.hn-bkt.clouddn.com";
//    private static String QINIU_IMAGE_DOMAIN = "http://logntao-asia-idvgwur.qiniudns.com";
    private static String QINIU_IMAGE_DOMAIN = "http://logntao.asia";

    //删除的
    private   BucketManager bucketMgr = new BucketManager(auth, cfg);

    // 简单上传，使用默认策略，只需要设置上传的空间名就可以了
    public String getUpToken() {
        return auth.uploadToken(bucketname);
    }

    @Autowired
    private FileUtil fileUtil;

    //设置下前缀路径
    String savePath="syt/images/head/";

    public String getSavePath() {
        return savePath;
    }

    public void setSavePath(String savePath) {
        this.savePath = savePath;
    }

    public String saveImage(MultipartFile file) throws IOException {


        try {
            int dotPos = file.getOriginalFilename().lastIndexOf(".");
            if (dotPos < 0) {
                return null;
            }
            String fileExt = file.getOriginalFilename().substring(dotPos + 1).toLowerCase();
            // 判断是否是合法的文件后缀
            if (!fileUtil.isFileAllowed(fileExt)) {
                return null;
            }
//            随机文件名   fileName1 返回的 文件名
            String fileName1 = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
            String fileName = savePath+fileName1;
            // 调用put方法上传
            Response res = uploadManager.put(file.getBytes(), fileName, getUpToken());
            // 打印返回的信息
            if (res.isOK() && res.isJson()) {
                // 返回这张存储照片的地址
//                System.out.println("导入地址："+QINIU_IMAGE_DOMAIN + JSONObject.parseObject(res.bodyString()).get("key"));
                return fileName1;
            } else {
                logger.error("七牛异常:" + res.bodyString());
                return null;
            }
        } catch (QiniuException e) {
            // 请求失败时打印的异常的信息
            logger.error("七牛异常:" + e.getMessage());
            return null;
        }
    }

    public String delImage(String imgname){

//  删除输入你的 空间  和 文件名（带地址的）
        try {
            bucketMgr.delete(bucketname,savePath+imgname);
        } catch (QiniuException ex) {
            //如果遇到异常，说明删除失败
            System.err.println(ex.code());
            System.err.println(ex.response.toString());
            return "error";
        }

        return "del  img: "+savePath+imgname;
    }


//    获取下载连接
    public String getQnyUrl(String targetUrl){
        long expireInSeconds = 600000;//600 =6分钟，可以自定义链接过期时间
        //拼接以下地址   只要库里面的
        String geturl=savePath+targetUrl;

//        System.out.println(geturl);
        String encodedFileName="";
        try {
             encodedFileName = URLEncoder.encode(geturl, "utf-8").replace("+", "%20");
        } catch (UnsupportedEncodingException e) {

            System.out.println("加密出错");
        }
//        拼接以下字符串
        String publicUrl = String.format("%s/%s", QINIU_IMAGE_DOMAIN, encodedFileName);
        return auth.privateDownloadUrl(publicUrl);
    }
}